//
// 树的孩子表示法
// Created by 麻再挺 on 2021/12/15.
//

#ifndef DATA_STRUCTURE_C_CHILD_TREE_H
#define DATA_STRUCTURE_C_CHILD_TREE_H

#include <stdio.h>
#include <stdlib.h>
#include "../constant.h"
// 容量
#define CT_MAX_SIZE 20
// 类型
#define CTElemType char

//孩子表示法
typedef struct CTNode {
    //链表中每个结点存储的不是数据本身，而是数据在数组中存储的位置下标
    int child;
    struct CTNode *next;
} ChildPtr;

typedef struct {
    //结点的数据类型
    CTElemType data;
    //孩子链表的头指针
    ChildPtr *firstChild;
} CTBox;

typedef struct {
    //存储结点的数组
    CTBox nodes[CT_MAX_SIZE];
    //结点数量和树根的位置
    int n, r;
} CTree;


/**
 * 初始化
 * @param t 树
 */
Status CTree_Init(CTree *t);

/**
 * 查找元素
 * @param t 树
 * @param e 元素
 */
void CTree_Find_Kids(CTree *t, CTElemType e);

/**
 * 打印
 * @param t 树
 */
void CTree_Print(CTree *t);

#endif //DATA_STRUCTURE_C_CHILD_TREE_H
